﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GazelDoor.Model;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

namespace GazelDoor.Controlli
{
    public class ctrlCorso
    {
        GazelConnessione gazelConnector = GazelConnessione.Istance();

        public void Inserisci(Corso corso) 
        {
            string query = "INSERT INTO Corsi VALUES (@id, @codice, @datainizio, @nome, @numeroore)";
            try
            {
            SqlCommand insert = new SqlCommand(query, gazelConnector.Connessione);

            SqlParameter id = new SqlParameter();
            id.ParameterName = "@id";
            id.SqlDbType = SqlDbType.UniqueIdentifier;
            id.Value = corso.Id;
            insert.Parameters.Add(id);

            SqlParameter codice = new SqlParameter();
            codice.ParameterName = "@codice";
            codice.SqlDbType = SqlDbType.NVarChar;
            codice.Value = corso.Codice;
            insert.Parameters.Add(codice);

            SqlParameter datainizio = new SqlParameter();
            datainizio.ParameterName = "@datainizio";
            datainizio.SqlDbType = SqlDbType.DateTime;
            datainizio.Value = corso.DataInizio;
            insert.Parameters.Add(datainizio);

            SqlParameter nome = new SqlParameter();
            nome.ParameterName = "@nome";
            nome.SqlDbType = SqlDbType.NVarChar;
            nome.Value = corso.Nome;
            insert.Parameters.Add(nome);

            SqlParameter numeroore = new SqlParameter();
            numeroore.ParameterName = "@numeroore";
            numeroore.SqlDbType = SqlDbType.Int;
            numeroore.Value = corso.NumeroOre;
            insert.Parameters.Add(numeroore);

            insert.ExecuteNonQuery();
            }
            catch(SqlException ex){
                MessageBox.Show("Errore nel Controllo dell'Inserimento" + ex.Message);
            }
        }

        public void Update(Corso corso) 
        {
            string query = "UPDATE Corsi SET codice = @codice, datainizio = @datainizio, nome = @nome, numeroore =  @numeroore"
                            +" WHERE id ='"+ corso.Id +"'";
            try
            {
            SqlCommand update = new SqlCommand(query, gazelConnector.Connessione);

            SqlParameter codice = new SqlParameter();
            codice.ParameterName = "@codice";
            codice.SqlDbType = SqlDbType.NVarChar;
            codice.Value = corso.Codice;
            update.Parameters.Add(codice);

            SqlParameter datainizio = new SqlParameter();
            datainizio.ParameterName = "@datainizio";
            datainizio.SqlDbType = SqlDbType.DateTime;
            datainizio.Value = corso.DataInizio;
            update.Parameters.Add(datainizio);

            SqlParameter nome = new SqlParameter();
            nome.ParameterName = "@nome";
            nome.SqlDbType = SqlDbType.NVarChar;
            nome.Value = corso.Nome;
            update.Parameters.Add(nome);

            SqlParameter numeroore = new SqlParameter();
            numeroore.ParameterName = "@numeroore";
            numeroore.SqlDbType = SqlDbType.Int;
            numeroore.Value = corso.NumeroOre;
            update.Parameters.Add(numeroore);

            update.ExecuteNonQuery();
            }
            catch(SqlException ex){
                MessageBox.Show("Errore nel Controllo dell'Update" + ex.Message);
            }
        }
        public Corso GetCorsoById(Guid id) {
            Corso corsoDaRitornare = new Corso();
            string query = " SELECT * FROM Corsi WHERE id = '" +id+ "'";

            DataTable dataTable = new DataTable();

            SqlDataAdapter dp = new SqlDataAdapter(query, gazelConnector.Connessione);
            dp.Fill(dataTable);

            corsoDaRitornare.Id = (Guid)dataTable.Rows[0]["id"];
            corsoDaRitornare.Nome = dataTable.Rows[0]["nome"].ToString();
            corsoDaRitornare.Codice = dataTable.Rows[0]["codice"].ToString();
            corsoDaRitornare.NumeroOre = (Int32)dataTable.Rows[0]["numeroore"];
            corsoDaRitornare.DataInizio = (DateTime)dataTable.Rows[0]["datainizio"];


            return corsoDaRitornare;
        }
        public List<Corso> SelectAll() {
            List<Corso> corsiDaRitornare = new List<Corso>();
            string query = " SELECT * FROM Corsi ";
            DataTable dataTable = new DataTable();
            SqlDataAdapter dp = new SqlDataAdapter(query, gazelConnector.Connessione);
            dp.Fill(dataTable);

            foreach (DataRow row in dataTable.Rows)
            {
                Corso corsoDaRitornare = new Corso();
                corsoDaRitornare.Id = (Guid)row["id"];
                corsoDaRitornare.Nome = row["nome"].ToString();
                corsoDaRitornare.Codice = row["codice"].ToString();
                corsoDaRitornare.NumeroOre = (Int32)row["numeroore"];
                corsoDaRitornare.DataInizio = (DateTime)row["datainizio"];
                corsiDaRitornare.Add(corsoDaRitornare);
            }
            return corsiDaRitornare;
        }


        public void Delete(Corso daCancellare)
        {
            string query = " DELETE FROM Corsi WHERE id = '"+daCancellare.Id+"'";
            SqlCommand elimina = new SqlCommand(query, gazelConnector.Connessione);
            elimina.ExecuteNonQuery();
        }
        public void DeleteBy(Guid id)
        {
            string query = " DELETE FROM Corsi WHERE id = '" + id + "'";
            SqlCommand elimina = new SqlCommand(query, gazelConnector.Connessione);
            elimina.ExecuteNonQuery();
        }
    }
}
